package com.zmn.plat.services.impl.message;

import java.util.List;
import java.util.stream.Collectors;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.zmn.common.utils.date.DateUtil;
import com.zmn.plat.manager.constant.MsgTemplateConsts;
import com.zmn.plat.model.entity.message.*;
import com.zmn.plat.persistence.interfaces.message.MsgTemplateConfigDAO;
import com.zmn.plat.services.interfaces.message.MsgTemplateConfigService;

/**
 * MsgTemplateConfigService 模板消息配置ServiceImpl
 *
 * @author tanghongjun
 */
@Service
public class MsgTemplateConfigServiceImpl implements MsgTemplateConfigService {

    @Resource
    MsgTemplateConfigDAO msgTemplateConfigDAO;

    @Override
    public MsgTemplateConfig findByKey(Integer relateId) {
        return msgTemplateConfigDAO.findByKey(relateId);
    }

    @Override
    public Integer findKeyForMax() {
        return msgTemplateConfigDAO.findKeyForMax();
    }

    @Override
    public List<MsgTemplateConfig> listPageByQuery(MsgTemplateConfigQuery query) {
        int count = msgTemplateConfigDAO.countByQuery(query);
        query.setTotalCount(count);
        return msgTemplateConfigDAO.listPageByQuery(query);
    }

    @Override
    public List<MsgTemplateConfig> listByQuery(MsgTemplateConfigQuery query) {
        return msgTemplateConfigDAO.listByQuery(query);
    }

    @Override
    public List<MsgTemplateConfigVO> listByTemplateIdAndType(Integer templateId, Integer msgTempType) {
        return msgTemplateConfigDAO.listByTemplateIdAndType(templateId, msgTempType);
    }

    @Override
    public List<MsgTemplateConfig> listAll() {
        return msgTemplateConfigDAO.listAll();
    }

    @Override
    public List<MsgTemplateChannelVO> listPageChannelByQuery(MsgTemplateChannelQuery query) {
        int count = msgTemplateConfigDAO.countChannelByQuery(query);
        query.setTotalCount(count);
        return msgTemplateConfigDAO.listPageChannelByQuery(query);
    }

    @Override
    public Integer countChannelByQuery(MsgTemplateChannelQuery query) {
        return msgTemplateConfigDAO.countChannelByQuery(query);
    }

    @Override
    public Integer countByQuery(MsgTemplateConfigQuery query) {
        return msgTemplateConfigDAO.countByQuery(query);
    }

    @Override
    public Integer insert(MsgTemplateConfig msgTemplateConfig) {
        return msgTemplateConfigDAO.insert(msgTemplateConfig);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveByTempateIdAndCityIds(Integer templateId, List<Integer> cityIds, String creater) {
        msgTemplateConfigDAO.deleteByTemplateIdAndType(templateId, MsgTemplateConsts.MSG_TEMP_TYPE_CITY);
        List<MsgTemplateConfig> msgTemplateConfigList = cityIds.stream().map(cityId -> {
            MsgTemplateConfig msgTemplateConfig = new MsgTemplateConfig();
            msgTemplateConfig.setBusinessId(cityId);
            msgTemplateConfig.setBusinessType(MsgTemplateConsts.MSG_TEMP_TYPE_CITY);
            msgTemplateConfig.setTemplateId(templateId);
            msgTemplateConfig.setCreater(creater);
            msgTemplateConfig.setCreateTime(DateUtil.getNow());
            return msgTemplateConfig;
        }).collect(Collectors.toList());
        msgTemplateConfigDAO.insertBatch(msgTemplateConfigList);
    }

    @Override
    public int insertBatch(List<MsgTemplateConfig> list) {
        return msgTemplateConfigDAO.insertBatch(list);
    }

    @Override
    public int deleteBatch(List<Integer> ids) {
        return msgTemplateConfigDAO.deleteBatch(ids);
    }

    @Override
    public Integer deleteByKey(Integer relateId) {
        return msgTemplateConfigDAO.deleteByKey(relateId);
    }
}
